home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / MutantMarine.s < prev    next >
Text File  |  1995-09-14  |  15KB  |  959 lines

  1. ItsAMutantMarine:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  
  11.  move.b worry(a0),d0
  12.  move.b d0,d1
  13.  and.w #128,d1
  14.  and.b #127,d0
  15.  sub.b #1,d0
  16.  bge.s .oknn
  17.  move.b #0,d0
  18. .oknn: 
  19.  add.b d0,d1
  20.  move.b d1,worry(a0)
  21.  
  22.  move.w (a0),CollId
  23.  move.w #80,extlen
  24.  move.b #1,awayfromwall
  25.  
  26.  move.l #20*256,StepUpVal
  27.  move.l #20*256,StepDownVal
  28.  move.l #128*128,thingheight
  29.  move.l #4,deadframe
  30.  move.w #0,screamsound
  31.  move.w #64,nasheight
  32.  clr.b gotgun
  33.  move.w 12(a0),d2
  34.  bge.s .stillalive
  35. .notthisone:
  36.  move.w 12(a0),GraphicRoom(a0)
  37.  rts
  38. .stillalive:
  39.  
  40.  tst.b numlives(a0)
  41.  bgt .notdying
  42.  
  43.  move.w ThirdTimer(a0),d1
  44.  sub.w TempFrames,d1
  45.  bge.s .noneg
  46.  move.w #0,d1
  47. .noneg:
  48.  move.w d1,ThirdTimer(a0)
  49.  
  50.  move.w .dyinganim(pc,d1.w*2),10(a0)
  51.  
  52.  move.b #0,numlives(a0)
  53.  move.l ZoneAdds,a1
  54.  move.l (a1,d2.w*4),a1
  55.  add.l LEVELDATA,a1
  56.  
  57.  move.l ToZoneFloor(a1),d0
  58.  tst.b ObjInTop(a0)
  59.  beq.s .notintopp
  60.  move.l ToUpperFloor(a1),d0
  61. .notintopp:
  62.  asr.l #7,d0
  63.  sub.w #64,d0
  64.  move.w d0,4(a0)
  65.  move.w 12(a0),GraphicRoom(a0)
  66.  rts
  67.  
  68. .dyinganim:
  69.  dcb.w 6,18
  70.  dcb.w 10,17
  71.  dcb.w 10,16
  72.  
  73. .notdying: 
  74.  
  75.  tst.b 17(a0)
  76.  beq.s .cantseeplayer
  77.  tst.w ThirdTimer(a0)
  78.  ble MutMarAttack
  79.  move.w TempFrames,d0
  80.  sub.w d0,ThirdTimer(a0)
  81.  bra .waitandsee
  82.  
  83. .cantseeplayer:
  84.  
  85.  jsr GetRand
  86.  lsr.w #4,d0
  87.  and.w #63,d0
  88.  add.w #20,d0
  89.  move.w d0,ThirdTimer(a0)
  90.  
  91. .waitandsee:
  92.  
  93.  move.w #25,FourthTimer(a0)
  94.  
  95.  move.w 12(a0),d2
  96.  move.l ZoneAdds,a5
  97.  move.l (a5,d2.w*4),d0
  98.  add.l LEVELDATA,d0
  99.  move.l d0,objroom
  100.  
  101.  jsr ViewpointToDraw
  102.  
  103.  asl.l #2,d0
  104.  add.w alframe+2,d0
  105.  add.l #$000a0000,d0
  106.  move.l d0,8(a0)
  107.  
  108.  move.w 4(a0),d0
  109.  sub.w #64,d0
  110.  ext.l d0
  111.  asl.l #7,d0
  112.  move.l d0,newy
  113.  move.l d0,oldy
  114.  
  115.  move.w 12(a0),FromZone
  116.  jsr CheckTeleport
  117.  tst.b OKTEL
  118.  beq.s .notel
  119.  move.l floortemp,d0
  120.  asr.l #7,d0
  121.  add.w d0,4(a0)
  122.  bra .nochangedir
  123. .notel:
  124.  
  125.  move.w maxspd(a0),d2
  126.  muls TempFrames,d2
  127.  move.w d2,speed
  128.  move.w Facing(a0),d0
  129.  move.b ObjInTop(a0),StoodInTop
  130.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  131.  jsr GoInDirection
  132.  move.w #%1000000000,wallflags
  133.  
  134.  move.l #%11111111110111100001,CollideFlags
  135.  jsr Collision
  136.  tst.b hitwall
  137.  beq.s .canmove
  138.  
  139.  move.w oldx,newx
  140.  move.w oldz,newz
  141.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  142.  bra .hitathing
  143.  
  144. .canmove:
  145.  
  146.  clr.b wallbounce
  147.  jsr MoveObject
  148.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  149.  move.b StoodInTop,ObjInTop(a0)
  150.  
  151. .hitathing:
  152.  
  153.  tst.b hitwall
  154.  beq.s .nochangedir
  155.  move.w #-1,ObjTimer(a0)
  156. .nochangedir
  157.  
  158.  move.l objroom,a2
  159.  move.w (a2),12(a0)
  160.  move.w newx,(a1)
  161.  move.w newz,4(a1)
  162.  
  163.  move.w (a2),d0
  164.  move.l #ZoneBrightTable,a5
  165.  move.l (a5,d0.w*4),d0
  166.  tst.b ObjInTop(a0)
  167.  bne.s .okbit
  168.  swap d0
  169. .okbit:
  170.  move.w d0,2(a0)
  171.  
  172.  move.l ToZoneFloor(a2),d0
  173.  tst.b ObjInTop(a0)
  174.  beq.s .notintop
  175.  move.l ToUpperFloor(a2),d0
  176. .notintop:
  177.  asr.l #7,d0
  178.  sub.w #64,d0
  179.  move.w d0,4(a0)
  180.  
  181.  moveq #0,d2
  182.  move.b damagetaken(a0),d2
  183.  beq .noscream
  184.  
  185.  sub.b d2,numlives(a0)
  186.  bgt .notdeadyet
  187.  
  188.  cmp.b #1,d2
  189.  ble .noexplode
  190.  
  191.  movem.l d0-d7/a0-a6,-(a7)
  192.  sub.l ObjectPoints,a1
  193.  add.l #ObjRotated,a1
  194.  move.l (a1),Noisex
  195.  move.w #400,Noisevol
  196.  move.w #14,Samplenum
  197.  move.b #1,chanpick
  198.  clr.b notifplaying
  199.  st backbeat
  200.  move.b 1(a0),IDNUM
  201.  jsr MakeSomeNoise
  202.  movem.l (a7)+,d0-d7/a0-a6
  203.  
  204.  movem.l d0-d7/a0-a6,-(a7)
  205.  move.w #0,d0
  206.  asr.w #2,d2
  207.  tst.w d2
  208.  bgt.s .ko
  209.  moveq #1,d2
  210. .ko:
  211.  move.w #31,d3
  212.  jsr ExplodeIntoBits
  213.  movem.l (a7)+,d0-d7/a0-a6
  214.  
  215.  cmp.b #40,d2
  216.  blt .noexplode
  217.  
  218.  move.w #-1,12(a0)
  219.  move.w 12(a0),GraphicRoom(a0)
  220.  rts
  221.  
  222. .noexplode:
  223.  
  224.  movem.l d0-d7/a0-a6,-(a7)
  225.  sub.l ObjectPoints,a1
  226.  add.l #ObjRotated,a1
  227.  move.l (a1),Noisex
  228.  move.w #200,Noisevol
  229.  move.w screamsound,Samplenum
  230.  move.b #1,chanpick
  231.  clr.b notifplaying
  232.  st backbeat
  233.  move.b 1(a0),IDNUM
  234.  jsr MakeSomeNoise
  235.  movem.l (a7)+,d0-d7/a0-a6
  236.  
  237.  move.w #25,ThirdTimer(a0)
  238.  move.w 12(a0),GraphicRoom(a0)
  239.  rts
  240.  
  241. .notdeadyet:
  242.  clr.b damagetaken(a0)
  243.  movem.l d0-d7/a0-a6,-(a7)
  244.  sub.l ObjectPoints,a1
  245.  add.l #ObjRotated,a1
  246.  move.l (a1),Noisex
  247.  move.w #200,Noisevol
  248.  move.w screamsound,Samplenum
  249.  move.b #1,chanpick
  250.  clr.b notifplaying
  251.  move.b 1(a0),IDNUM
  252.  st backbeat
  253.  jsr MakeSomeNoise
  254.  movem.l (a7)+,d0-d7/a0-a6
  255.  
  256.  
  257. .noscream
  258.  
  259.  
  260.  move.w TempFrames,d0
  261.  sub.w d0,ObjTimer(a0)
  262.  bge.s .keepsamedir
  263.  
  264.  jsr GetRand
  265.  and.w #8190,d0
  266.  move.w d0,Facing(a0)
  267.  move.w #50,ObjTimer(a0)
  268.  
  269. .keepsamedir:
  270.  
  271.  move.w TempFrames,d0
  272.  sub.w d0,SecTimer(a0)
  273.  bge.s .nohiss
  274.  
  275.  jsr GetRand
  276.  lsr.w #6,d0
  277.  and.w #1,d0
  278.  add.w #17,d0
  279.  movem.l d0-d7/a0-a6,-(a7)
  280.  sub.l ObjectPoints,a1
  281.  add.l #ObjRotated,a1
  282.  move.l (a1),Noisex
  283.  move.w #100,Noisevol
  284.  move.w d0,Samplenum
  285.  move.b #1,chanpick
  286.  clr.b notifplaying
  287.  move.b 1(a0),IDNUM
  288.  st backbeat
  289.  jsr MakeSomeNoise
  290.  movem.l (a7)+,d0-d7/a0-a6
  291.  Jsr GetRand
  292.  lsr.w #6,d0
  293.  and.w #255,d0
  294.  add.w #300,d0
  295.  move.w d0,SecTimer(a0)
  296.  
  297. .nohiss:
  298.  
  299.  move.b ObjInTop(a0),ViewerTop
  300.  move.b PLR1_StoodInTop,TargetTop
  301.  move.l PLR1_Roompt,ToRoom
  302.  move.l objroom,FromRoom
  303.  move.w newx,Viewerx
  304.  move.w newz,Viewerz
  305.  move.w PLR1_xoff,Targetx
  306.  move.w PLR1_zoff,Targetz
  307.  move.l PLR1_yoff,d0
  308.  asr.l #7,d0
  309.  move.w d0,Targety
  310.  move.w 4(a0),Viewery
  311.  jsr CanItBeSeen
  312.  
  313.  clr.b 17(a0)
  314.  
  315.  tst.b CanSee
  316.  beq .carryonprowling
  317.  
  318.  move.b #1,17(a0)
  319.  
  320. .carryonprowling:
  321.  
  322.  move.b ObjInTop(a0),ViewerTop
  323.  move.b PLR2_StoodInTop,TargetTop
  324.  move.l PLR2_Roompt,ToRoom
  325.  move.l objroom,FromRoom
  326.  move.w newx,Viewerx
  327.  move.w newz,Viewerz
  328.  move.w PLR2_xoff,Targetx
  329.  move.w PLR2_zoff,Targetz
  330.  move.l PLR2_yoff,d0
  331.  asr.l #7,d0
  332.  move.w d0,Targety
  333.  move.w 4(a0),Viewery
  334.  jsr CanItBeSeen
  335.  
  336.  tst.b CanSee
  337.  beq .carryonprowling2
  338.  
  339.  or.b #2,17(a0)
  340.  
  341. .carryonprowling2:
  342.  
  343.  move.w 12(a0),GraphicRoom(a0)
  344.  rts
  345.  
  346. MutMarAttack:
  347.  
  348.  move.w 12(a0),d2
  349.  move.l ZoneAdds,a5
  350.  move.l (a5,d2.w*4),d0
  351.  add.l LEVELDATA,d0
  352.  move.l d0,objroom
  353.  jsr ViewpointToDraw
  354.  asl.l #2,d0
  355.  add.w alframe+2,d0
  356.  add.l #$000a0000,d0
  357.  move.l d0,8(a0)
  358.  
  359.  btst #0,17(a0)
  360.  beq MutMarAttackPLR2
  361.  btst #1,17(a0)
  362.  beq MutMarAttackPLR1
  363.  
  364.  move.l ObjectPoints,a1
  365.  move.w (a0),d0
  366.  move.w (a1,d0.w*8),d1
  367.  move.w 4(a1,d0.w*8),d2
  368.  
  369.  move.w PLR1_xoff,d3
  370.  move.w PLR1_zoff,d4
  371.  sub.w d1,d3
  372.  sub.w d2,d4
  373.  muls d3,d3
  374.  muls d4,d4
  375.  add.l d4,d3
  376.  move.w PLR2_xoff,d4
  377.  move.w PLR2_zoff,d5
  378.  sub.w d1,d4
  379.  sub.w d2,d5
  380.  muls d4,d4
  381.  muls d5,d5
  382.  add.l d5,d4
  383.  cmp.l d3,d4
  384.  ble MutMarAttackPLR2
  385.  
  386.  
  387. MutMarAttackPLR1:
  388.  
  389.  move.w TempFrames,d0
  390.  sub.w d0,FourthTimer(a0)
  391.  bgt.s .oktoshoot
  392.  move.w #50,ThirdTimer(a0)
  393. .oktoshoot:
  394.  
  395.  move.w 12(a0),d2
  396.  move.l ZoneAdds,a5
  397.  move.l (a5,d2.w*4),d0
  398.  add.l LEVELDATA,d0
  399.  move.l d0,objroom
  400.  
  401.  jsr ViewpointToDraw
  402.  
  403.  asl.l #2,d0
  404.  add.l #$a0000,d0
  405.  move.l d0,8(a0)
  406.  
  407.  move.w PLR1_xoff,newx
  408.  move.w PLR1_zoff,newz
  409.  move.w (a0),d1
  410.  move.l #ObjRotated,a6
  411.  move.l ObjectPoints,a1
  412.  lea (a1,d1.w*8),a1
  413.  lea (a6,d1.w*8),a6
  414.  move.w (a1),oldx
  415.  move.w 4(a1),oldz
  416.  move.w maxspd(a0),d2
  417.  muls.w TempFrames,d2
  418.  move.w d2,speed
  419.  move.w #80,Range
  420.  move.w 4(a0),d0
  421.  ext.l d0
  422.  asl.l #7,d0
  423.  sub.l #64*128,d0
  424.  move.l d0,newy
  425.  move.l d0,oldy
  426.  
  427.  move.b ObjInTop(a0),StoodInTop
  428.  movem.l d0/a0/a1/a3/a6/a4/d7,-(a7)
  429.  clr.b canshove
  430.  clr.b GotThere
  431.  jsr HeadTowardsAng
  432.  move.w #%1000000000,wallflags
  433.  
  434.   
  435.  clr.b wallbounce
  436.  Jsr MoveObject
  437.  movem.l (a7)+,d0/a0/a6/a1/a3/a4/d7
  438.  move.b StoodInTop,ObjInTop(a0)
  439.  
  440.  move.w AngRet,Facing(a0)
  441.  
  442.  move.l objroom,a2
  443.  move.w (a2),12(a0)
  444.  move.w newx,(a1)
  445.  move.w newz,4(a1)
  446.  
  447.  move.w (a2),d0
  448.  move.l #ZoneBrightTable,a5
  449.  move.l (a5,d0.w*4),d0
  450.  tst.b ObjInTop(a0)
  451.  bne.s .okbit
  452.  swap d0
  453. .okbit:
  454.  move.w d0,2(a0)
  455.  
  456.  move.l ToZoneFloor(a2),d0
  457.  tst.b ObjInTop(a0)
  458.  beq.s .notintop
  459.  move.l ToUpperFloor(a2),d0
  460. .notintop:
  461.  asr.l #7,d0
  462.  sub.w #64,d0
  463.  move.w d0,4(a0)
  464.  
  465.  moveq #0,d2
  466.  move.b damagetaken(a0),d2
  467.  beq .noscream
  468.  
  469.  sub.b d2,numlives(a0)
  470.  bgt .notdeadyet
  471.  
  472.  cmp.b #1,d2
  473.  ble .noexplode
  474.  
  475.  movem.l d0-d7/a0-a6,-(a7)
  476.  sub.l ObjectPoints,a1
  477.  add.l #ObjRotated,a1
  478.  move.l (a1),Noisex
  479.  move.w #400,Noisevol
  480.  move.w #14,Samplenum
  481.  move.b #1,chanpick
  482.  clr.b notifplaying
  483.  st backbeat
  484.  move.b 1(a0),IDNUM
  485.  jsr MakeSomeNoise
  486.  movem.l (a7)+,d0-d7/a0-a6
  487.  
  488.  movem.l d0-d7/a0-a6,-(a7)
  489.  move.w #0,d0
  490.  asr.w #2,d2
  491.  tst.w d2
  492.  bgt.s .ko
  493.  moveq #1,d2
  494. .ko:
  495.  move.w #31,d3
  496.  jsr ExplodeIntoBits
  497.  movem.l (a7)+,d0-d7/a0-a6
  498.  
  499.  cmp.b #40,d2
  500.  blt .noexplode
  501.  
  502.  move.w #-1,12(a0)
  503.  move.w 12(a0),GraphicRoom(a0)
  504.  rts
  505.  
  506. .noexplode:
  507.  
  508.  movem.l d0-d7/a0-a6,-(a7)
  509.  sub.l ObjectPoints,a1
  510.  add.l #ObjRotated,a1
  511.  move.l (a1),Noisex
  512.  move.w #200,Noisevol
  513.  move.w screamsound,Samplenum
  514.  move.b #1,chanpick
  515.  clr.b notifplaying
  516.  st backbeat
  517.  move.b 1(a0),IDNUM
  518.  jsr MakeSomeNoise
  519.  movem.l (a7)+,d0-d7/a0-a6
  520.  
  521.  move.w #25,ThirdTimer(a0)
  522.  
  523.  move.w 12(a0),GraphicRoom(a0)
  524.  rts
  525.  
  526. .notdeadyet:
  527.  clr.b damagetaken(a0)
  528.  movem.l d0-d7/a0-a6,-(a7)
  529.  sub.l ObjectPoints,a1
  530.  add.l #ObjRotated,a1
  531.  move.l (a1),Noisex
  532.  move.w #200,Noisevol
  533.  move.w screamsound,Samplenum
  534.  move.b #1,chanpick
  535.  clr.b notifplaying
  536.  move.b 1(a0),IDNUM
  537.  st backbeat
  538.  jsr MakeSomeNoise
  539.  movem.l (a7)+,d0-d7/a0-a6
  540.  
  541. .noscream
  542.  
  543. ; tst.b canshootgun
  544. ; beq .cantshoot
  545.  cmp.w #20,FourthTimer(a0)
  546.  bgt .cantshoot
  547.  
  548.  jsr GetRand
  549.  and.w #255,d0
  550.  add.w #50,d0
  551.  move.w d0,ThirdTimer(a0)
  552.  move.l (a6),Noisex
  553.  move.w #200,Noisevol
  554.  move.w #3,Samplenum
  555.  move.b #1,chanpick
  556.  clr.b notifplaying
  557.  movem.l a5/a1/a0,-(a7)
  558.  move.b 1(a0),IDNUM
  559.  jsr MakeSomeNoise
  560.  movem.l (a7)+,a5/a1/a0
  561.  
  562.  move.w #-100,2(a0)
  563.  
  564.  movem.l a0/a1,-(a7)
  565.  jsr GetRand
  566.  
  567.  move.l #ObjRotated,a6
  568.  move.w (a0),d1
  569.  lea (a6,d1.w*8),a6
  570.  
  571.  and.w #$7fff,d0
  572.  move.w (a6),d1
  573.  muls d1,d1
  574.  move.w 2(a6),d2
  575.  muls d2,d2
  576.  add.l d2,d1
  577.  asr.l #6,d1
  578.  ext.l d0
  579.  asl.l #2,d0
  580.  cmp.l d1,d0
  581.  bgt.s .hitplr
  582.  jsr SHOOTPLAYER1
  583.  bra.s .missplr
  584. .hitplr: 
  585.  move.l PLR1_Obj,a1
  586.  add.b #4,damagetaken(a1)
  587. .missplr:
  588.  movem.l (a7)+,a0/a1
  589.  
  590. .cantshoot:
  591.  
  592.  
  593.  move.w TempFrames,d0
  594.  sub.w d0,SecTimer(a0)
  595.  bge.s .nohiss
  596.  
  597.  movem.l d0-d7/a0-a6,-(a7)
  598.  sub.l ObjectPoints,a1
  599.  add.l #ObjRotated,a1
  600.  move.l (a1),Noisex
  601.  move.w #100,Noisevol
  602.  move.w #16,Samplenum
  603.  move.b #1,chanpick
  604.  clr.b notifplaying
  605.  move.b 1(a0),IDNUM
  606.  st backbeat
  607.  jsr MakeSomeNoise
  608.  movem.l (a7)+,d0-d7/a0-a6
  609.  
  610.  Jsr GetRand
  611.  lsr.w #6,d0
  612.  and.w #255,d0
  613.  add.w #300,d0
  614.  move.w d0,SecTimer(a0)
  615.  
  616. .nohiss:
  617.  
  618.  move.b ObjInTop(a0),ViewerTop
  619.  move.b PLR1_StoodInTop,TargetTop
  620.  move.l PLR1_Roompt,ToRoom
  621.  move.l objroom,FromRoom
  622.  move.w newx,Viewerx
  623.  move.w newz,Viewerz
  624.  move.w PLR1_xoff,Targetx
  625.  move.w PLR1_zoff,Targetz
  626.  move.l PLR1_yoff,d0
  627.  asr.l #7,d0
  628.  move.w d0,Targety
  629.  move.w 4(a0),Viewery
  630.  jsr CanItBeSeen
  631.  
  632.  clr.b 17(a0)
  633.  tst.b CanSee
  634.  beq .carryonprowling
  635.  
  636.  move.b #1,17(a0)
  637.  
  638. .carryonprowling:
  639.  
  640.  cmp.b #'n',mors
  641.  beq.s .carryonprowling2
  642.  
  643.  
  644.  move.b ObjInTop(a0),ViewerTop
  645.  move.b PLR2_StoodInTop,TargetTop
  646.  move.l PLR2_Roompt,ToRoom
  647.  move.l objroom,FromRoom
  648.  move.w newx,Viewerx
  649.  move.w newz,Viewerz
  650.  move.w PLR2_xoff,Targetx
  651.  move.w PLR2_zoff,Targetz
  652.  move.l PLR2_yoff,d0
  653.  asr.l #7,d0
  654.  move.w d0,Targety
  655.  move.w 4(a0),Viewery
  656.  jsr CanItBeSeen
  657.  
  658.  tst.b CanSee
  659.  beq .carryonprowling2
  660.  
  661.  or.b #2,17(a0)
  662.  
  663. .carryonprowling2:
  664.  
  665.  
  666.  move.w 12(a0),GraphicRoom(a0)
  667.  rts
  668.  
  669. *************************************************
  670.  
  671. MutMarAttackPLR2:
  672.  
  673.   
  674.  move.w TempFrames,d0
  675.  sub.w d0,FourthTimer(a0)
  676.  bgt.s .oktoshoot
  677.  move.w #50,ThirdTimer(a0)
  678. .oktoshoot:
  679.  
  680.  move.w 12(a0),d2
  681.  move.l ZoneAdds,a5
  682.  move.l (a5,d2.w*4),d0
  683.  add.l LEVELDATA,d0
  684.  move.l d0,objroom
  685.  
  686.  jsr ViewpointToDraw
  687.  
  688.  asl.l #2,d0
  689.  add.l #$a0000,d0
  690.  move.l d0,8(a0)
  691.  
  692.  move.w PLR2_xoff,newx
  693.  move.w PLR2_zoff,newz
  694.  move.w (a0),d1
  695.  move.l #ObjRotated,a6
  696.  move.l ObjectPoints,a1
  697.  lea (a1,d1.w*8),a1
  698.  lea (a6,d1.w*8),a6
  699.  move.w (a1),oldx
  700.  move.w 4(a1),oldz
  701.  move.w maxspd(a0),d2
  702.  muls.w TempFrames,d2
  703.  move.w d2,speed
  704.  move.w #80,Range
  705.  move.w 4(a0),d0
  706.  ext.l d0
  707.  asl.l #7,d0
  708.  sub.l #64*128,d0
  709.  move.l d0,newy
  710.  move.l d0,oldy
  711.  
  712.  move.b ObjInTop(a0),StoodInTop
  713.  movem.l d0/a0/a1/a3/a6/a4/d7,-(a7)
  714.  clr.b canshove
  715.  clr.b GotThere
  716.  jsr HeadTowardsAng
  717.  move.w #%1000000000,wallflags
  718.  
  719.   
  720.  clr.b wallbounce
  721.  Jsr MoveObject
  722.  movem.l (a7)+,d0/a0/a1/a3/a6/a4/d7
  723.  move.b StoodInTop,ObjInTop(a0)
  724.  
  725.  move.w AngRet,Facing(a0)
  726.  
  727.  move.l objroom,a2
  728.  move.w (a2),12(a0)
  729.  move.w newx,(a1)
  730.  move.w newz,4(a1)
  731.  
  732.  move.w (a2),d0
  733.  move.l #ZoneBrightTable,a5
  734.  move.l (a5,d0.w*4),d0
  735.  tst.b ObjInTop(a0)
  736.  bne.s .okbit
  737.  swap d0
  738. .okbit:
  739.  move.w d0,2(a0)
  740.  
  741.  move.l ToZoneFloor(a2),d0
  742.  tst.b ObjInTop(a0)
  743.  beq.s .notintop
  744.  move.l ToUpperFloor(a2),d0
  745. .notintop:
  746.  asr.l #7,d0
  747.  sub.w #64,d0
  748.  move.w d0,4(a0)
  749.  
  750.  moveq #0,d2
  751.  move.b damagetaken(a0),d2
  752.  beq .noscream
  753.  
  754.  sub.b d2,numlives(a0)
  755.  bgt .notdeadyet
  756.  
  757.  cmp.b #1,d2
  758.  ble.s .noexplode
  759.  
  760.  movem.l d0-d7/a0-a6,-(a7)
  761.  sub.l ObjectPoints,a1
  762.  add.l #ObjRotated,a1
  763.  move.l (a1),Noisex
  764.  move.w #400,Noisevol
  765.  move.w #14,Samplenum
  766.  move.b #1,chanpick
  767.  clr.b notifplaying
  768.  st backbeat
  769.  move.b 1(a0),IDNUM
  770.  jsr MakeSomeNoise
  771.  movem.l (a7)+,d0-d7/a0-a6
  772.  
  773.  movem.l d0-d7/a0-a6,-(a7)
  774.  move.w #0,d0
  775.  tst.w d2
  776.  bgt.s .ko
  777.  moveq #1,d2
  778. .ko:
  779.  move.w #31,d3
  780.  jsr ExplodeIntoBits
  781.  movem.l (a7)+,d0-d7/a0-a6
  782.  
  783.  cmp.b #10,d2
  784.  blt .noexplode
  785.  
  786.  move.w #-1,12(a0)
  787.  move.w 12(a0),GraphicRoom(a0)
  788.  rts
  789.  
  790. .noexplode:
  791.  
  792.  movem.l d0-d7/a0-a6,-(a7)
  793.  sub.l ObjectPoints,a1
  794.  add.l #ObjRotated,a1
  795.  move.l (a1),Noisex
  796.  move.w #200,Noisevol
  797.  move.w screamsound,Samplenum
  798.  move.b #1,chanpick
  799.  clr.b notifplaying
  800.  st backbeat
  801.  move.b 1(a0),IDNUM
  802.  jsr MakeSomeNoise
  803.  movem.l (a7)+,d0-d7/a0-a6
  804.  
  805.  move.w #25,ThirdTimer(a0)
  806.  
  807.  move.w 12(a0),GraphicRoom(a0)
  808.  rts
  809.  
  810. .notdeadyet:
  811.  clr.b damagetaken(a0)
  812.  movem.l d0-d7/a0-a6,-(a7)
  813.  sub.l ObjectPoints,a1
  814.  add.l #ObjRotated,a1
  815.  move.l (a1),Noisex
  816.  move.w #200,Noisevol
  817.  move.w screamsound,Samplenum
  818.  move.b #1,chanpick
  819.  clr.b notifplaying
  820.  move.b 1(a0),IDNUM
  821.  st backbeat
  822.  jsr MakeSomeNoise
  823.  movem.l (a7)+,d0-d7/a0-a6
  824.  
  825.  
  826.  
  827. .noscream
  828.  
  829. ; tst.b canshootgun
  830. ; beq .cantshoot
  831.  cmp.w #20,FourthTimer(a0)
  832.  bge .cantshoot
  833.  
  834.  jsr GetRand
  835.  and.w #255,d0
  836.  add.w #200,d0
  837.  move.w d0,ThirdTimer(a0)
  838.  
  839.  move.l (a6),Noisex
  840.  move.w #200,Noisevol
  841.  move.w #3,Samplenum
  842.  move.b #1,chanpick
  843.  clr.b notifplaying
  844.  movem.l a5/a1/a0,-(a7)
  845.  move.b 1(a0),IDNUM
  846.  jsr MakeSomeNoise
  847.  movem.l (a7)+,a5/a1/a0
  848.  
  849.  move.w #-100,2(a0)
  850.  
  851.  movem.l a0/a1,-(a7)
  852.  jsr GetRand
  853.  
  854.  move.l #ObjRotated,a6
  855.  move.w (a0),d1
  856.  lea (a6,d1.w*8),a6
  857.  
  858.  and.w #$7fff,d0
  859.  move.w (a6),d1
  860.  muls d1,d1
  861.  move.w 2(a6),d2
  862.  muls d2,d2
  863.  add.l d2,d1
  864.  asr.l #6,d1
  865.  ext.l d0
  866.  asl.l #2,d0
  867.  cmp.l d1,d0
  868.  bgt.s .hitplr
  869.  jsr SHOOTPLAYER2
  870.  bra.s .missplr
  871. .hitplr: 
  872.  move.l PLR2_Obj,a1
  873.  add.b #4,damagetaken(a1)
  874. .missplr:
  875.  movem.l (a7)+,a0/a1
  876.  
  877. .cantshoot:
  878.  
  879.  
  880.  move.w TempFrames,d0
  881.  sub.w d0,SecTimer(a0)
  882.  bge.s .nohiss
  883.  
  884.  movem.l d0-d7/a0-a6,-(a7)
  885.  sub.l ObjectPoints,a1
  886.  add.l #ObjRotated,a1
  887.  move.l (a1),Noisex
  888.  move.w #100,Noisevol
  889.  move.w #16,Samplenum
  890.  move.b #1,chanpick
  891.  clr.b notifplaying
  892.  move.b 1(a0),IDNUM
  893.  st backbeat
  894.  jsr MakeSomeNoise
  895.  movem.l (a7)+,d0-d7/a0-a6
  896.  
  897.  Jsr GetRand
  898.  lsr.w #6,d0
  899.  and.w #255,d0
  900.  add.w #300,d0
  901.  move.w d0,SecTimer(a0)
  902.  
  903. .nohiss:
  904.  
  905.  move.b ObjInTop(a0),ViewerTop
  906.  move.b PLR1_StoodInTop,TargetTop
  907.  move.l PLR1_Roompt,ToRoom
  908.  move.l objroom,FromRoom
  909.  move.w newx,Viewerx
  910.  move.w newz,Viewerz
  911.  move.w PLR1_xoff,Targetx
  912.  move.w PLR1_zoff,Targetz
  913.  move.l PLR1_yoff,d0
  914.  asr.l #7,d0
  915.  move.w d0,Targety
  916.  move.w 4(a0),Viewery
  917.  jsr CanItBeSeen
  918.  
  919.  clr.b 17(a0)
  920.  tst.b CanSee
  921.  beq .carryonprowling
  922.  
  923.  move.b #1,17(a0)
  924.  
  925. .carryonprowling:
  926.  
  927.  cmp.b #'n',mors
  928.  beq.s .carryonprowling2
  929.  
  930.  
  931.  move.b ObjInTop(a0),ViewerTop
  932.  move.b PLR2_StoodInTop,TargetTop
  933.  move.l PLR2_Roompt,ToRoom
  934.  move.l objroom,FromRoom
  935.  move.w newx,Viewerx
  936.  move.w newz,Viewerz
  937.  move.w PLR2_xoff,Targetx
  938.  move.w PLR2_zoff,Targetz
  939.  move.l PLR2_yoff,d0
  940.  asr.l #7,d0
  941.  move.w d0,Targety
  942.  move.w 4(a0),Viewery
  943.  jsr CanItBeSeen
  944.  
  945.  tst.b CanSee
  946.  beq .carryonprowling2
  947.  
  948.  or.b #2,17(a0)
  949.  
  950. .carryonprowling2:
  951.  
  952.  
  953.  
  954.  
  955.  move.w 12(a0),GraphicRoom(a0)
  956.  rts
  957.  
  958.  
  959.